//没有注册中间件 默认body "not found"
//没有注册中间件 默认status 404
const _ = require("lodash");
const Koa = require("koa");
const Router = require('@koa/router');
const bodyParser = require('koa-bodyparser');
const error = require('koa-json-error')
const parameter = require('koa-parameter');


const app = new Koa();
const router = new Router({prefix:"/api/user"});

//默认情况下 koa的第一个中间件会自动执行
//在加入了后台路由后 所有的中间件 只有在path被命中时才会调用
router.get('/', (ctx, next) => {
    //状态码 必须是一个大于等于100 小于等于999的数字
    //ctx.status=2000;
    console.log(ctx.query,ctx.params)
    ctx.body={
        code:200,
        msg:"router-get"
    }
});
router.post('/', (ctx, next) => {
    console.log(ctx.request.body)
    ctx.body={
        code:200,
        msg:"router-post"
    }
});
router.put('/', (ctx, next) => {
    console.log(ctx.headers.damu)
    ctx.body={
        code:200,
        msg:"router-put"
    }
});
router.patch('/', (ctx, next) => {
    ctx.body={
        code:200,
        msg:"router-patch"
    }
});
router.delete('/', (ctx, next) => {
    //验证body中是否拥有name字段 这个name字段必须得是字符串;是必选项!
    ctx.verifyParams({
        name: {
            type:'string',
            required:true
        }
    });
    ctx.body={
        code:200,
        msg:"router-delete"
    }
});

//多中间件
router.get("/info",async (ctx,next)=>{
    if(ctx.query.token){
        await next()
        ctx.body.name = "xxxx"
    }else{
        ctx.status=403
        ctx.body={
            code:403,
            msg:"你倒是登录呀"
        }
    }
}, async(ctx)=>{
    ctx.body={
        name:"damu",
        wife:"dy",
        son:"xiaoen"
    }
})

//注册中间件(bodyParser一定要早于路由注册)
parameter(app);
app.use(error({
    postFormat: (e, obj) => process.env.flag === 'pro' ? _.omit(obj, 'stack') : obj
}))
app.use(bodyParser())
app.use(router.routes())
app.use(router.allowedMethods())


//启动服务
app.listen(3000)